package Funcionalidades.BuscarCompetencia;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import javax.swing.AbstractAction;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JComboBox;
import java.awt.Component;
import java.awt.Dimension;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import java.awt.FlowLayout;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import java.awt.ComponentOrientation;
import java.awt.event.ActionEvent;
import java.sql.SQLException;
import java.util.Vector;

import javax.swing.SwingConstants;

import Funcionalidades.Menues.FrameUsuarioAutenticado;
import Funcionalidades.Menues.MyTableModel;
import Funcionalidades.Menues.PanelGeneral;
import Funcionalidades.VerCompetencia.VerCompetencia;
import Gestores.GestorCompetencia;
import Gestores.GestorLugarDeRealizacion;
import Gestores.GestorUsuario;
import ActionListeners.*;
import Entidades.EntidadesLogica.*;


public class MisCompetencias extends PanelGeneral {

	
	private static final long serialVersionUID = 1L;

	
	//ELEMENTOS!!
	private JComboBox<String> cbDeporte;
	private JComboBox<String> cbEstado;
	private JComboBox<String> cbModalidad;
	private JTextField txtNombre;
	private JTable table;
	private JTextField txtUsuario;
	private JButton btnBuscarCompetencia;

	//ATRIBUTOS DE LA CLASE!!
	private String nombreComp;
	private String deporteComp;
	private String nombreUsuario;
	private String estadoComp;
	private String tipoModComp;	
	private String UsuarioLogueado;
	
	private GestorLugarDeRealizacion gLugarDeRealizacion;
	private Vector<LugarDeRealizacion> lugares;
	private String[] nombreLugares;
	
	private Vector<String> tipoModalidades;
	private Vector<String> estados;
	private Vector<Competencia> competenciasEncontradas= new Vector<Competencia>();

	private GestorUsuario gUsuario;
	private GestorCompetencia gCompetencia;
	private Vector<String> deportes;
	
	public MisCompetencias(FrameUsuarioAutenticado framePerteneciente) {
		
		super(framePerteneciente);
		setPreferredSize(new Dimension(800, 500));
		setAlignmentY(1.0f);
		setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		
		//datos= new Dimension(150, 30);
		
		
		gUsuario= gUsuario.getGestorUsuario();
		gCompetencia= gCompetencia.getGestorCompetencia();
		UsuarioLogueado= gUsuario.getUsuarioLogueado().getCorreo_electronico();
		
		try {
			tipoModalidades= gCompetencia.TiposModalidades();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//BUSCAR DEPORTES
		try{
			deportes= gCompetencia.listar_todos_deportes();
		}
		catch(SQLException s){
			System.out.println(s.getMessage());
		}
		
		try {
			estados=gCompetencia.obtenerEstados();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		setNombreCU("Mis Competencias");
		
		JPanel panelCriterioBusqueda = new JPanel();
		panelCriterioBusqueda.setLayout(new BoxLayout(panelCriterioBusqueda, BoxLayout.X_AXIS));
		
		JPanel criterioBusqueda = new JPanel();
		criterioBusqueda.setOpaque(false);
		add(criterioBusqueda);
		
		criterioBusqueda.setMinimumSize(new Dimension(10, 130));
		criterioBusqueda.setAlignmentY(0.2f);
		criterioBusqueda.setBorder(new TitledBorder(null, "Criterio de B\u00FAsqueda", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		criterioBusqueda.setLayout(new BoxLayout(criterioBusqueda, BoxLayout.Y_AXIS));
		criterioBusqueda.setMaximumSize(new Dimension(2000,130));
		
		JPanel panel1 = new JPanel();
		panel1.setOpaque(false);
		FlowLayout flowLayout_1 = (FlowLayout) panel1.getLayout();
		flowLayout_1.setAlignment(FlowLayout.LEFT);
		panel1.setMaximumSize(new Dimension(2000,60));
		criterioBusqueda.add(panel1);

		
		JLabel lblNombre = new JLabel("Nombre: ");
		lblNombre.setHorizontalAlignment(SwingConstants.RIGHT);
		panel1.add(lblNombre);
		lblNombre.setPreferredSize(label);
		
		txtNombre = new JTextField();
		panel1.add(txtNombre);
		txtNombre.setPreferredSize(datos);
		txtNombre.addKeyListener(new MascaraMayusculakeyListener());
		
		
		Component horizontalStrut = Box.createHorizontalStrut(20);
		panel1.add(horizontalStrut);
		
		JLabel lblDeporte = new JLabel("Deporte: ");
		lblDeporte.setHorizontalAlignment(SwingConstants.RIGHT);
		panel1.add(lblDeporte);
		lblDeporte.setPreferredSize(label);
		
		
		cbDeporte = new JComboBox<String>( deportes );
		panel1.add(cbDeporte);
		cbDeporte.setPreferredSize(datos);
		cbDeporte.addKeyListener(new MascaraMayusculakeyListener());
		
		Component horizontalStrut_1 = Box.createHorizontalStrut(20);
		panel1.add(horizontalStrut_1);
		
		JLabel lblUsuario = new JLabel("Usuario: "+UsuarioLogueado);
		lblUsuario.setHorizontalAlignment(SwingConstants.RIGHT);
		panel1.add(lblUsuario);
/*		
		txtUsuario = new JTextField();
		txtUsuario.setEditable(false);
		txtUsuario.setText(UsuarioLogueado);
		txtUsuario.setPreferredSize(datos);
		panel1.add(txtUsuario);
		
	*/	
		
		JPanel panel2 = new JPanel();
		panel2.setOpaque(false);
		FlowLayout flowLayout_2 = (FlowLayout) panel2.getLayout();
		flowLayout_2.setAlignment(FlowLayout.LEFT);
		panel2.setMaximumSize(new Dimension(2000,60));
		criterioBusqueda.add(panel2);
		
		JLabel lblEstado = new JLabel("Estado: ");
		lblEstado.setHorizontalAlignment(SwingConstants.RIGHT);
		panel2.add(lblEstado);
		lblEstado.setPreferredSize(label);
		
		cbEstado = new JComboBox<String>(estados);
		panel2.add(cbEstado);
		cbEstado.setPreferredSize(datos);
		cbEstado.addKeyListener(new MascaraMayusculakeyListener());
		
		Component horizontalStrut_3 = Box.createHorizontalStrut(20);
		panel2.add(horizontalStrut_3);
		
		JLabel lblModalidad = new JLabel("Modalidad: ");
		lblModalidad.setHorizontalAlignment(SwingConstants.RIGHT);
		panel2.add(lblModalidad);
		lblModalidad.setPreferredSize(label);

		cbModalidad = new JComboBox<String>(tipoModalidades);
		panel2.add(cbModalidad);
		cbModalidad.setPreferredSize(datos);
		cbModalidad.addKeyListener(new MascaraMayusculakeyListener());
		
		Component horizontalStrut_4 = Box.createHorizontalStrut(20);
		panel2.add(horizontalStrut_4);
		
		btnBuscarCompetencia = new JButton("Buscar Competencia");
		panel2.add(btnBuscarCompetencia);
		btnBuscarCompetencia.setPreferredSize(new Dimension(165, 30));
		btnBuscarCompetencia.addActionListener(new buscarAction());
		
		Component verticalStrut = Box.createVerticalStrut(20);
		add(verticalStrut);
		
		JPanel panelCriterios = new JPanel();
		panelCriterios.setOpaque(false);
		FlowLayout flowLayout_3 = (FlowLayout) panelCriterios.getLayout();
		flowLayout_3.setAlignment(FlowLayout.LEFT);
		add(panelCriterios);
		
		JLabel lblCriteriosUtilizados = new JLabel("Criterios Utilizados: ");
		panelCriterios.add(lblCriteriosUtilizados);
		lblCriteriosUtilizados.setHorizontalTextPosition(SwingConstants.LEADING);
		
		JPanel panelResultados = new JPanel();
		panelResultados.setOpaque(false);
		add(panelResultados);
		panelResultados.setLayout(new BoxLayout(panelResultados, BoxLayout.Y_AXIS));
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBorder(new TitledBorder(null, "Resultados", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelResultados.add(scrollPane);
		
		table = new JTable();
		
			
		table.setModel(new misCompetenciaTableModel(competenciasEncontradas));
		table.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);
		scrollPane.setViewportView(table);
		table.setRowSelectionAllowed(true);
		table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
		
		JPanel panelDarAltaCompetencia = new JPanel();
		panelDarAltaCompetencia.setOpaque(false);
		FlowLayout flowLayout = (FlowLayout) panelDarAltaCompetencia.getLayout();
		flowLayout.setAlignment(FlowLayout.LEFT);
		add(panelDarAltaCompetencia);
		
		JLabel lbResultadosInesperados = new JLabel("\u00BFNo son los Resultados esperados?");
		panelDarAltaCompetencia.add(lbResultadosInesperados);
		
		JButton btnDarAltaCompetencia = new JButton("Dar Alta Competencia Deportiva");
		panelDarAltaCompetencia.add(btnDarAltaCompetencia);
		btnDarAltaCompetencia.addActionListener(new AltaCompetenciaAction(framePerteneciente));
		
		Component verticalStrut_1 = Box.createVerticalStrut(20);
		add(verticalStrut_1);
		
		JPanel panelExtends = new JPanel();
		panelExtends.setOpaque(false);
		add(panelExtends);
		
		JButton btnVerCompetencia = new JButton("Ver Competencia");
		panelExtends.add(btnVerCompetencia);
		btnVerCompetencia.setPreferredSize(btnDarAltaCompetencia.getPreferredSize());
		btnVerCompetencia.addActionListener(new VerCompetenciaAction(getFramePerteneciente()));
		
		JButton btnAtras= new JButton("Volver Atras");
		panelExtends.add(btnAtras);
		btnAtras.setPreferredSize(btnDarAltaCompetencia.getPreferredSize());
		btnAtras.addActionListener(new AtrasAction(getFramePerteneciente()));
		
		Component glue = Box.createGlue();
		add(glue);
		

	}
	
	class buscarAction extends AbstractAction{


		private static final long serialVersionUID = 1L;

		public void actionPerformed(ActionEvent arg0) {
			deporteComp= cbDeporte.getSelectedItem().toString();
			nombreComp= txtNombre.getText();
			tipoModComp=cbModalidad.getSelectedItem().toString();
			estadoComp=cbEstado.getSelectedItem().toString();
			
				
			try {
				competenciasEncontradas=gCompetencia.obtenerCompetenciaUsuario(gUsuario.getUsuarioLogueado(),nombreComp,tipoModComp , estadoComp,deporteComp );
				table.setModel(new misCompetenciaTableModel(competenciasEncontradas));

				
			} catch (Throwable e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
	
	@SuppressWarnings("unused")
	private class misCompetenciaTableModel extends MyTableModel{
		private static final long serialVersionUID = 1L;
		
		public misCompetenciaTableModel(Vector<Competencia> competencias){
			super();
			
			String[] columnas={"NOMBRE","USUARIO","ESTADO","MODALIDAD","DEPORTES"};
			setColumnNames(columnas);
			Object[][] info= new Object[competencias.size()][5];
			setColumnNames(columnas);
			if(competenciasEncontradas.size()>0){
	
				for(int i=0;i<competencias.size();i++){
					info[i][0]=competencias.get(i).getNombreCompetencia();
					info[i][1]=competencias.get(i).getCreadaPor().getNombre();
					info[i][2]=competencias.get(i).getEstado();
					info[i][3]=competencias.get(i).getModalidad().getTipoModalidad();
					info[i][4]=competencias.get(i).getDeporteAsociado();
				}
			}
			setInfo(info);
			boolean[] edits= {false,false,false,false,false};
			setEdits(edits);
			
			
			
		}
		
	}
	
	
	public class VerCompetenciaAction extends AbstractAction {

		private static final long serialVersionUID = 1L;
		private FrameUsuarioAutenticado frame;
		private Competencia c;
		
		public VerCompetenciaAction(FrameUsuarioAutenticado frame){
			super();
			this.frame=frame;

		}

		@Override
		public void actionPerformed(ActionEvent e) {
			int linea;
			linea=table.getSelectedRow();
			
			if(linea>=0){
				c=competenciasEncontradas.get(linea);
				frame.cambiarCU(new VerCompetencia(frame,c));
				System.out.println(c.getNombreCompetencia());
			}
			else
				
				JOptionPane.showMessageDialog(frame,"Falta seleccionar una Competencia","Error",   JOptionPane.ERROR_MESSAGE);
	    }
		

	}



}

